#로또 번호는 6개의 숫자가 모여서 구성된다.
#로또 용지는 로또 번호 5개까지 표시할 수 있다.
#로또 용지는 로또 차수와 일시가 표시되며, 용지는 소유자가 존재한다.
#소유자는 여러 개의 로또 용지를 가질 수 있다.

#로또 용지: Lotto Ticket
#로또 번호: Lotto Numbers
#로또 소유자: Lotto Owner
#로또 차수: Lotto Sequence
#로또 일시: Lotto Daytime

# 로또 번호들을 과리하기 위한 객체
# 로또 예측 번호나 로또 담청 번호를 관리한다.
class LottoEntity():
    def __init__(self):
        self.data = {}
        
    def add(self, groupName, v1, v2, v3, v4, v5, v6):
        if(self.data.has_key(groupName)):
            group = LottoGroup()
            group.setName(groupName)
            self.data[groupName] = group
            return 0
            
        group = self.data[groupName]
        group.add(v1, v2, v3, v4, v5, v6)
        #elem = LottoElement()
        #elem.setGroupName(groupName)
        #elem.setValuse(v1, v2, v3, v4, v5, v6)
        #self.data[groupName] = {}
        
        return 1
        
    def set(self, groupName, index, v1, v2, v3, v4, v5, v6):
        if(0==self.data.has_key(groupName)):
            return 0
        
        group = self.data[groupName]
        group.set(index, v1, v2, v3, v4, v5, v6)
        
        return 1
    
    def remove(self, groupName):
        del self.data[groupName]
        
    def get(self, groupName):
        if(0==self.data.has_key(groupName)):
            return 0
        
        return self.data[groupName]
    
class LottoGroup():
    def __init__(self):
        self.name = ''
        self.list = []
        
    def setName(self, name):
        self.name = name
        
    def getName(self):
        return self.name
        
    def add(self, v1, v2, v3, v4, v5, v6):
        elem = LottoNumbers()
        elem.setGroupName(self.name)
        elem.setValuse(v1, v2, v3, v4, v5, v6)
        self.list.append(elem)
        
    def remove(self, index):
        if index > len(self.list):
            return
        
        del self.list[index]
        
        
    def get(self, index):
        if index > len(self.list):
            return 0
        return self.list[index]
    
    def set(self, index, v1, v2, v3, v4, v5, v6):
        if index > len(self.list):
            return 0
        elem = self.list[index]
        elem.setValuse(v1, v2, v3, v4, v5, v6)
        return 1

        
class LottoNumbers():
    def __init__(self):
        self.values = []
        self.groupName = ''
        self._id = -1
                
    def setValues(self, v1, v2, v3, v4, v5, v6):
        self.values = [v1, v2, v3, v4, v5, v6]
        self.values.sort()
        
    def setGroupName(self, groupName):
        self.groupName = groupName
        
        
    def getValues(self):
        return self.values
        
    def getGroupName(self):
        return self.groupName
    
    def intersection(self, list):
        return lottoIntersection(self.values, list)
       
       
#Parameters left and right must be have been sorted
# 교집합
# 인자 left, right은 정렬된 집합이 넘겨옴
# 반환값으로 교집합이 반환된다.
def lottoIntersection(left, right):
    resultSet = []
    i = 0
    j = 0
    len_l = len(left)
    len_r = len(right)
    #left.sort()
    #right.sort()
    while i<len_l and j<len_r:
        if left[i] == right[j]:
            resultSet.append(left[i])
            i = i + 1
            j = j + 1
        elif left[i]<right[j]:
            i = i + 1
        else:
            j = j + 1
    return resultSet
    
    
    
if __name__ == "__main__":
    lottoRepo = LottoEntity()
    lottoRepo.add("A", 1, 2, 3, 4, 5, 6)
    lottoRepo.set("A", 2, 3, 4, 5, 6, 7)
    elem = lottoRepo.get("A")    
    interSet = lottoIntersection([1,2,3], [1,3,4])
    lottoRepo.remove("A")
    
    